package com.wsoft.hr.pm.service.sys;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wsoft.hr.pm.entity.sys.HrOrganizationEntity;
import com.wsoft.hr.pm.query.sys.HrOrgInsertQuery;
import com.wsoft.hr.pm.query.sys.HrOrgListQuery;
import com.wsoft.hr.pm.query.sys.HrOrgUpdateQuery;
import com.wsoft.hr.pm.query.sys.OrgInitQuery;
import com.wsoft.hr.pm.vo.sys.HrOrganizationVO;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhanggukai
 * @since 2025年02月17日 15:27:01
 */
public interface IHrOrganizationService extends IService<HrOrganizationEntity> {

    /**
     * 初始化组织
     * @param query
     */
    void initPmOrganization(OrgInitQuery query);


    /**
     * 新增组织
     * @param query
     * @return boolean
     */
    boolean insert(HrOrgInsertQuery query);

    /**
     * 修改组织
     * @param query
     * @return boolean
     */
    boolean update(HrOrgUpdateQuery query);

    /**
     * 根据ID获取组织详情
     * @param id
     * @return HrOrganizationEntity
     */
    HrOrganizationEntity getOrgById(Long id);

    /**
     * 根据ID删除组织
     * @param id
     * @return boolean
     */

    boolean delete(Long id);

    /**
     * 获取组织列表
     * @param query
     * @return List<HrOrganizationEntity>
     */
    List<HrOrganizationEntity> getOrgList(HrOrgListQuery query);

    /**
     * 获取全量绩效组织列表
     * @return
     */
    List<HrOrganizationEntity> listAllHrOrgWithCache();

    /**
     * 获取组织树
     * @return List<SysOrganizationVO>
     */
    List<HrOrganizationVO> selectOrgListTree();

    /**
     * 获取当前组织的所有下级组织列表
     * @param orgId 组织ID
     * @param haveOwn 是否包含自己
     * @return 下级组织列表
     */
    List<HrOrganizationVO> getChildOrg(Long orgId ,boolean haveOwn);
}
